$(document).ready(function () {
  /* ------------
    |  GRÁFICAS  |
     ------------ */
    oyentesBotonesGrafica();
    enviarPeticionGraficaVentasNetas('ultimo_anio');
    $('#loaderGraficaVentas').show();

  /* ----------------------
    |  TABLA VENTAS NETAS  |
     ---------------------- */

    $('#tabla_informes_ventas').hide();

    $('#tabla_informes_ventas').jtable({
        title: 'Ventas',
        addRecordButton: false,
        openChildAsAccordion: true,
        sorting: true,
        defaultSorting: 'fechaHora DESC',
        actions: {
            listAction: function (postData, jtParams) {
                return $.Deferred(function ($dfd) {
                    $.ajax({
                        url: '../php/informes/operacionesInformesVentas.php',
                        type: 'POST',
                        dataType: 'json',
                        data: crearPeticionJsonInformesVentas(jtParams.jtSorting, postData),
                        success: function (data) {
                            $dfd.resolve(data);
                        },
                        error: function (data) {
                            console.log(data);
                            $dfd.reject();
                        }
                    });
                });
            }
        },
        fields: {
            detallesCabecera:{
                title: '',
                width: '1%',
                sorting: false,
                edit: false,
                create: false,
                display: function (datosOperacion) {
                    // Imagen de la columna
                    var $img;
                    if(datosOperacion.record.devoluciones > 0) {
                        $img = $('<div align="center" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="Esta operación contiene devoluciones"><i class="fa fa-plus-square text-lg red"></i></div>');
                        $img.tooltip();
                    }else{
                        $img = $('<div align="center"><i class="fa fa-plus-square text-lg"></i></div>');
                    }
                    // Abre el hijo cuando pinchamos en la imagen
                    $img.click(function () {
                        $('#tabla_informes_ventas').jtable('openChildTable',
                                $img.closest('tr'),
                                {
                                    title: 'Código venta: ' + datosOperacion.record.idCabecera + ' - Detalles',
                                    actions: {
                                        listAction: function (postData, jtParams) {
                                            return $.Deferred(function ($dfd) {
                                                $.ajax({
                                                    url: '../php/informes/operacionesInformesVentas.php',
                                                    type: 'POST',
                                                    dataType: 'json',
                                                    data: crearPeticionJsonInformesDetallesVenta(datosOperacion.record.idCabecera, 'fechaHora ASC'),
                                                    success: function (data) {
                                                        $dfd.resolve(data);
                                                    },
                                                    error: function (data) {
                                                        console.log(data);
                                                        $dfd.reject();
                                                    }
                                                });
                                            });
                                        }
                                    },
                                    fields: {
                                        descripcion: {
                                            title: 'Descripción',
                                            listClass: 'campoCentrado',
                                            sorting: false,
                                        },
                                        tipoOperacion: {
                                            title: 'Operación',
                                            listClass: 'campoCentrado',
                                            sorting: false,
                                            display: function (datosOperacion) {
                                                if(datosOperacion.record.tipoOperacion == 'VENTA') {
                                                    return $('<span class="label label-success">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VENTA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>');
                                                }else{
                                                    return $('<span class="label label-danger">DEVOLUCIÓN</span>');
                                                }
                                            }
                                        },
                                        unidades: {
                                            title: 'Unidades',
                                            listClass: 'campoCentrado',
                                            sorting: false,
                                        },
                                        precioUnidad: {
                                            title: 'Precio unidad',
                                            listClass: 'campoCentrado campoInvisible400',
                                            sorting: false,
                                            display: function (datosOperacion){
                                                return parseFloat(datosOperacion.record.precioUnidad).toFixed(2).replace(".", ",") + " €";
                                            }
                                        },
                                        iva: {
                                            title: 'IVA',
                                            listClass: 'campoCentrado campoInvisible400',
                                            sorting: false,
                                            display: function (datosOperacion){
                                                return parseFloat(datosOperacion.record.iva).toFixed(2).replace(".", ",") + " €";
                                            }
                                        },
                                        ivaTotal: {
                                            title: 'IVA total',
                                            listClass: 'campoCentrado campoInvisible400',
                                            sorting: false,
                                            display: function (datosOperacion) {
                                                if(datosOperacion.record.tipoOperacion == 'VENTA') {
                                                    return parseFloat(datosOperacion.record.ivaTotal).toFixed(2).replace(".", ",") + " €";
                                                }else{
                                                    return parseFloat(-datosOperacion.record.ivaTotal).toFixed(2).replace(".", ",") + " €";
                                                }
                                            }
                                        },
                                        importeTotal: {
                                            title: 'Importe total',
                                            listClass: 'campoCentrado',
                                            sorting:false,
                                            display: function (datosOperacion) {
                                                var resultado = parseFloat(datosOperacion.record.importeTotal) + parseFloat(datosOperacion.record.ivaTotal);
                                                if(datosOperacion.record.tipoOperacion == 'DEVOLUCION') {
                                                    return $('<span class="text-red">' + parseFloat(resultado).toFixed(2).replace(".", ",") + ' €</span>');
                                                }else{
                                                    return parseFloat(resultado).toFixed(2).replace(".", ",") + " €";
                                                }
                                            }
                                        },
                                        fechaHora: {
                                            title: 'Fecha operación',
                                            listClass: 'campoCentrado',
                                            width: '10%',
                                            sorting: false
                                        }
                                    }
                                }, function (data) { //opened handler
                                    data.childTable.jtable('load');
                                });
                    });
                    //Return image to show on the person row
                    return $img;
                }
            },
            idCabecera: {
                title: 'ID Operación',
                listClass: 'campoCentrado campoInvisible400',
                width: '15%',
                key: true,
                type: 'number',
                sorting: false,
            },
            fechaHora: {
                title: 'Fecha operación',
                listClass: 'campoCentrado',
                width: '15%',
            },
            numeroProductos: {
                title: 'Nº Productos',
                listClass: 'campoCentrado',
                width: '10%',
                sorting: false,
            },
            formaPago: {
                title: 'Modalidad',
                listClass: 'campoCentrado',
                width: '10%',
                sorting: false,
                display: function (datosOperacion){

                    if(datosOperacion.record.formaPago == 'Efectivo') {
                        return $('<span class="label label-success">&nbsp;&nbsp;' + datosOperacion.record.formaPago + '&nbsp;&nbsp;</span>');
                    }else{
                        var $imgFactura = $('<span id="' + datosOperacion.record.idCabecera +"-"+ datosOperacion.record.idOperacion  + '" class="label label-warning" data-toggle="modal" data-target="#modal_imagen_factura_informes_ventas" style="cursor:pointer;">' + datosOperacion.record.formaPago + ' <i class="icon-lg fa fa-camera"></i></span>');
                        $imgFactura.click(onClickImagenFactura);
                        return $imgFactura;
                    }
                }
            },
            importeTotal: {
                title: 'Importe total',
                listClass: 'campoCentrado',
                width: '15%',
                display: function (datosOperacion){
                    return parseFloat(datosOperacion.record.importeTotal).toFixed(2).replace(".", ",") + " €";
                }
            }
        }
    });

    var botonExportar = $('<div />')
                        .addClass('boton-tabla')
                        .appendTo('.table-primary > .table-header');
    
    var enlaceExportar = $('<a />')
                        .addClass('btn btn-default btn-labeled')
                        .attr('href', '#')
                        .html('<span class="btn-label icon fa fa-cloud-download"></span> Exportar tabla a Excel')
                        .appendTo(botonExportar);

    $('.table-primary > .table-header').append(botonExportar);

});

function crearPeticionJsonInformesVentas(ordenacion, tipoFecha){
    informacionJson = {};
    datosPeticionInformesVentas = {};
    datosPeticionInformesVentas.accion = 'listarVentas';
    datosPeticionInformesVentas.tipoFormulario = 'tabla_informes_ventas';
    datosPeticionInformesVentas.tokenCSRF = $('#informes_ventas_tabla_token_CSRF').val();
    datosPeticionInformesVentas.ordenacion = ordenacion;
    datosPeticionInformesVentas.tipoFecha = tipoFecha.filtroConsulta;
    informacionJson.datosPostInforme = datosPeticionInformesVentas;
    informacionJson.peticionAjax = 'SI';
    return informacionJson;
}

function crearPeticionJsonInformesDetallesVenta(idCabecera, ordenacion){
    informacionJson = {};
    datosPeticionInformesVentas = {};
    datosPeticionInformesVentas.accion = 'listarDetallesVenta';
    datosPeticionInformesVentas.idCabecera = idCabecera;
    datosPeticionInformesVentas.tipoFormulario = 'tabla_informes_ventas';
    datosPeticionInformesVentas.tokenCSRF = $('#informes_ventas_tabla_token_CSRF').val();
    datosPeticionInformesVentas.ordenacion = ordenacion;
    informacionJson.datosPostInforme = datosPeticionInformesVentas;
    informacionJson.peticionAjax = 'SI';
    return informacionJson;
}

function onClickImagenFactura(){
    // Obtenemos el idCabecera del name del icono
    var ids = $(this).attr('id').split('-');
    // Enviamos Post al Servidor
    var idCabecera = ids[0];
    var idOperacion = ids[1];
    enviarPeticionImagenFactura(idCabecera, idOperacion);
}

function enviarPeticionImagenFactura(idCabecera, idOperacion){
    datosEnvioPeticionImgFactura = {};
    // Datos de Contacto
    datosEnvioPeticionImgFactura.idCabecera = idCabecera;
    datosEnvioPeticionImgFactura.idOperacion = idOperacion;
    datosEnvioPeticionImgFactura.accion = 'descargarFactura';
    datosEnvioPeticionImgFactura.tipoFormulario = 'tabla_informes_ventas';
    datosEnvioPeticionImgFactura.tokenCSRF = $('#informes_ventas_tabla_token_CSRF').val();
    // JSON.stringfy(obj) transforma un objeto a una cadena de texto
    // JSON.parse(cadena) transforma una cadena en un objeto
    // Realizamos la peticion POST con el JSON de parametro
    $.post("../php/informes/operacionesInformesVentas.php", {datosPostInforme: JSON.stringify(datosEnvioPeticionImgFactura)}, callbackPeticionImagenFacturaExito).fail(failPostPeticionImagenFactura);
}

function callbackPeticionImagenFacturaExito(data){
    respuestaServidor = JSON.parse(data);
    // Cargamos la imagen en el modal
    factura = $('<img src="data:image/png;base64,' + respuestaServidor['imagenFacturaTarjeta'] + '" alt="Factura" width="100%">');
    $('#modal_imagen_factura_informes_ventas .btn-success').attr('href', 'data:image/png;base64,' + respuestaServidor['imagenFacturaTarjeta'] );
    $('#modal_imagen_factura_informes_ventas .modal-body').empty();
    $('#modal_imagen_factura_informes_ventas .modal-body').append(factura);
}

function failPostPeticionImagenFactura(data){
    $('#modal_imagen_factura_informes_ventas .modal-body').empty();
    $('#modal_imagen_factura_informes_ventas .modal-body').append(data);
}

  /* ------------
    |  GRÁFICAS  |
     ------------ */

  /* ----------------------------
    |  OYENTES BOTONES GRÁFICAS  |
     ---------------------------- */

function oyentesBotonesGrafica() {
    $('.panelOpcionesGraficas a.btn').click(function() {
        $('#tabla_informes_ventas').hide();
        $('.panelOpcionesGraficas a.btn').removeClass('active');
        $(this).addClass('active');
        enviarPeticionGraficaVentasNetas($(this).attr('value'));
    });

    $('#mostrar_tabla_ventas').click(function(event) {
        $('#tabla_informes_ventas').show();
        tipoFecha = $('.panelOpcionesGraficas a.btn.active').attr('value');
        $('#tabla_informes_ventas').jtable('load',{ filtroConsulta: tipoFecha});
    });
}

  /* ----------------
    |  VENTAS NETAS  |
     ---------------- */

function enviarPeticionGraficaVentasNetas(tipo){
    datosEnvioPeticionGraficaVentasNetas = {};
    tipoFecha = {};
    tipoFecha['tipo'] = tipo;

    datosEnvioPeticionGraficaVentasNetas.accion = 'graficaVentasNetas';
    datosEnvioPeticionGraficaVentasNetas.tipoFecha = tipoFecha;
    datosEnvioPeticionGraficaVentasNetas.tipoFormulario = 'tabla_informes_ventas';
    datosEnvioPeticionGraficaVentasNetas.tokenCSRF = $('#informes_ventas_tabla_token_CSRF').val();
    // JSON.stringfy(obj) transforma un objeto a una cadena de texto
    // JSON.parse(cadena) transforma una cadena en un objeto
    // Realizamos la peticion POST con el JSON de parametro
    $.post("../php/informes/operacionesInformesVentas.php", {datosPostInforme: JSON.stringify(datosEnvioPeticionGraficaVentasNetas)}, callbackPeticionGraficaVentasNetasExito).fail(failPostPeticionGraficaVentasNetas);
}

function callbackPeticionGraficaVentasNetasExito(data){
    respuestaServidor = JSON.parse(data);

    $('#loaderGraficaVentas').hide();

    var options = {
        chart: {
            renderTo: 'grafica_informes_ventas',
            type: 'spline',
            className: 'estiloGrafica',
            backgroundColor: 'rgba(0, 0, 0, 0.03)',
            borderColor: '#EBBA95',
            borderRadius: 20,
            borderWidth: 2,
        },
        credits: {
            enabled: false
        },
        navigation: {
            buttonOptions: {
                theme: {
                    'stroke-width': 1,
                    stroke: '#d4a886',
                    fill:'#EBBA95',
                    r: 5,
                    states: {
                        hover: {
                            stroke: '#d4a886',
                            fill: '#ffcaa2'
                        },
                        select: {
                            stroke: '#d4a886',
                            fill: '#cba080'
                        }
                    }
                }
            }
        },
        title: {
            text: 'Informe de ventas netas',
            // Para poder meter etiquetas de HTML en el título
            useHTML: true
        },
        plotOptions: {
            series: {
                connectNulls: true
            }
        },
        xAxis: {
            title: {
                text: respuestaServidor.ejeX.label,
                useHTML: true
            },
            categories: respuestaServidor.ejeX.categorias,
            showEmpty:true
        },
        yAxis: {
            title: {
                text: 'Euros',
                useHTML: true
            },
            min: 0
        },
        tooltip: {
                formatter: function () {
                    var s = '<b>' + this.x + '</b>';

                    $.each(this.points, function () {
                        s += '<br/>' + this.series.name + ': ' +
                            parseFloat(this.y).toFixed(2).replace(".", ",") + " €";
                    });

                    return s;
                },
                shared: true,
                crosshairs: false,
        },
        series: [{
                    name: '2014',
                    data: respuestaServidor.ejeX.actualidad
                }, {
                    name: '2013',
                    data: respuestaServidor.ejeX.pasado
                }],
        lang: {
            noData: 'No hay datos disponibles'
        },
        noData: {
            style:{
                fontWeight: 'bold',
                fontSize: '15px',
                color: '#303030'
            }
        }
    };
    // Datos primer elemento
    //options.series[0].data = respuestaServidor.consulta;
    var chart = new Highcharts.Chart(options);
}

function failPostPeticionGraficaVentasNetas(data){
    respuestaServidor = JSON.parse(data);
    console.log(respuestaServidor);
}
